package cn.iocoder.yudao.module.contract.service.invoiceContract;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.contract.controller.admin.invoiceContract.vo.*;
import cn.iocoder.yudao.module.contract.dal.dataobject.invoice.InvoiceDO;
import cn.iocoder.yudao.module.contract.dal.dataobject.invoiceContract.InvoiceContractDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 发票合同 Service 接口
 *
 * @author 管理员
 */
public interface InvoiceContractService extends IService<InvoiceContractDO> {

    /**
     * 创建发票合同
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createInvoiceContract(@Valid InvoiceContractSaveReqVO createReqVO);

    /**
     * 更新发票合同
     *
     * @param updateReqVO 更新信息
     */
    void updateInvoiceContract(@Valid InvoiceContractSaveReqVO updateReqVO);

    /**
     * 删除发票合同
     *
     * @param id 编号
     */
    void deleteInvoiceContract(Long id);

    /**
     * 获得发票合同
     *
     * @param id 编号
     * @return 发票合同
     */
    InvoiceContractDO getInvoiceContract(Long id);

    /**
     * 获得发票合同分页
     *
     * @param pageReqVO 分页查询
     * @return 发票合同分页
     */
    PageResult<InvoiceContractPageRespVO> getInvoiceContractPage(InvoiceContractPageReqVO pageReqVO);

    void generateContractFile(InvoiceContractDO invoiceContract,List<InvoiceDO> invoiceList,String type);

    void cancellation(InvoiceContractDO invoiceContract,List<InvoiceDO> invoiceList);
}